package socketmvc.core.codec;

import socketmvc.core.packets.basic.Protocol;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * 协议编解码器持有容器
 * @author xueyanjun
 */
public class ProtocolCodecHandler {

    private final Map<Byte, IPacketCodec> protocolCodecMap = new HashMap<>();

    public ProtocolCodecHandler() {
        protocolCodecMap.put(Protocol.JSON_SIMPLE_CONTENT.getVersion(), new JsonSimpleContentCodec());
        protocolCodecMap.put(Protocol.JSON_TEXT_HEX_CONTENT.getVersion(), new JsonTextHexContentCodec());
        protocolCodecMap.put(Protocol.JSON_TEXT_BASE64_CONTENT.getVersion(), new JsonTextBase64ContentCodec());
        protocolCodecMap.put(Protocol.JSON_TEXT_BIN_CONTENT.getVersion(), new JsonTextBinContentCodec());
        protocolCodecMap.put(Protocol.JSON_GZIP_TEXT_CONTENT.getVersion(), new JsonGzipTextContentCodec());
    }

    public void addProtocolCodec(Byte protocolVersion, IPacketCodec protocolCodec){
        protocolCodecMap.put(protocolVersion,protocolCodec);
    }

    public void addProtocolCodec(IPacketCodec protocolCodec){
        protocolCodecMap.put(protocolCodec.protocolVersion(),protocolCodec);
    }


    public void addProtocolCodec(Collection<IPacketCodec> protocolCodecs){
        for (IPacketCodec protocolCodec : protocolCodecs) {
            addProtocolCodec(protocolCodec);
        }
    }

    public IPacketCodec getProtocolCodec(Byte protocolVersion){
        return protocolCodecMap.get(protocolVersion);
    }

    public IPacketCodec getProtocolCodec(Protocol protocol){
        return protocolCodecMap.get(protocol.getVersion());
    }

}
